/*
 * 回文素数（4分）
 */

#include <stdio.h>

int main() {
	setbuf(stdout, NULL);

	// NOTE: Variable declaration
	int n, count = 0;

	// NOTE: Inputs
	printf("Input n:\n");
	scanf("%d", &n);


	// NOTE: Process
	// STEP: 遍历所有可能的数
	for (int i = 11; i <= n; ++i) {
		// STEP: 设置标记位flag，用于标记i是否是合数
		int flag = 0;

		// STEP: 循环遍历，标记待检验数i是否可能存在被2~n-1的任意一个数整除
		for (int j = 2; j < i; ++j) {
			if (i % j == 0) {
				++flag;
			}
		}

		// STEP: 如果标记位flag不是0，即i是合数。但，合数本程序不要
		if (flag != 0) {
			continue;
		}

		// STEP: 判断回文数
		// HINT: i是几位数。用msb记录i的最高位是第几
		int msb = 0;
		for (int j = i; j > 0; ++msb) {
			j /= 10;
		}

		// HINT: 将i逐位存入与之等大的整型数组i_arr中
		int i_arr[msb], buf = i;
		for (int j = 0; j < msb; ++j) {
			i_arr[j] = buf % 10;
			buf /= 10;
		}

		// HINT: 进行收尾比对，检验i是否是回文数
		// （复用flag）判断收尾数位是否有异
		flag = 0;
		// 如果flag进行首尾比对，检验i是否是回文数
		for (int j = 0, k = msb - 1; j < msb / 2; ++j, --k) {
			if (i_arr[j] != i_arr[k]) {
				++flag;
				break;
			}
		}

		// 如果flag进行收尾比对，检验i是否是回文数
		if (!flag) {
			printf("%4d", i);
			++count;
		}
	}


	// NOTE: Outputs
	printf("\ncount=%d\n", count);


	// NOTE: Ending
	return 0;
}